--[[
* @author PureMVC LUA Native Port by Ravior 
* @author Copyright(c) 2015 Gitlib, Inc., Some rights reserved.
* 
* @class puremvc.Proxy
* @extends puremvc.Notifier
*
* A base Proxy implementation. 
* 
* In PureMVC, Proxy classes are used to manage parts of the application's data 
* model.
* 
* A Proxy might simply manage a reference to a local data object, in which case 
* interacting with it might involve setting and getting of its data in 
* synchronous fashion.
* 
* Proxy classes are also used to encapsulate the application's interaction with 
* remote services to save or retrieve data, in which case, we adopt an 
* asyncronous idiom; setting data (or calling a method) on the Proxy and 
* listening for a 
* {@link puremvc.Notification Notification} 
* to be sent  when the Proxy has retrieved the data from the service.
]]
local Notifier = import("..observer.Notifier")

local Proxy = class("Proxy",Notifier)


--[[
* @constructor
* @param {string} [proxyName]
*  The Proxy's name. If none is provided, the Proxy will use its constructors
*  NAME property.
* @param {Object} [data]
*  The Proxy's data object
]]
function Proxy:ctor(proxyName,data)
	self.proxyName = proxyName or Proxy.NAME
	if data ~= nil then
		self:setData(data)
	end
end


Proxy.NAME= "Proxy"


--[[
* Get the Proxy's name.
*
* @return {string}
]]
function Proxy:getProxyName()
	return self.proxyName
end


--[[
* Set the Proxy's data object
*
* @param {Object} data
* @return {void}
]]
function Proxy:setData(data)
	self.data = data
end


--[[
* Get the Proxy's data object
*
* @return {Object}
]]
function  Proxy:getData()
	return self.data
end


--[[
* Called by the {@link puremvc.Model Model} when
* the Proxy is registered.
*
* @return {void}
]]
function Proxy:onRegister() end


--[[
* Called by the {@link puremvc.Model Model} when
* the Proxy is removed.
* 
* @return {void}
]]
function Proxy:onRemove() end

return Proxy
